package eSchool.DataLayer;

import eSchool.BL.CriteriosPesquisa;
import eSchool.BL.Utilizador;
import eSchool.BL.Utilizadores;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class AccessUtilizadorDAO implements IUtilizadorDAO{
    
     private Connection connection = null;
    
    public AccessUtilizadorDAO()        
    {
    }

    public int insertUtilizador(Utilizador utilizador) throws Exception {
        Connection con = connection;
        int resultado = -1;

        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlIns = "Insert into Utilizador ( codUtilizador, palavraChave, idDocfunc, codGrupoUtilizador)";
        sqlIns += " values (?,?,?,?)";
        PreparedStatement pst = con.prepareStatement(sqlIns);
        pst.setString(1, utilizador.getCodUtilizador());
        pst.setString(2, utilizador.getPalavraChave());
        pst.setInt(3, utilizador.getIdDocfunc());
        pst.setString(4, utilizador.getCodGrupoUtilizador());
        
        resultado = pst.executeUpdate();

        if (connection == null) {
            con.close();
            con = null;
        }

        return resultado;
    }

    public boolean deleteUtilizador(Utilizador utilizador) throws Exception {
        // Implement delete customer here
        // Return true on success, false on failure
        return true;
    }

    public boolean updateUtilizador(Utilizador utilizador) throws Exception {
        Connection con = connection;

        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlUpd = " Update Utilizador SET  " +
                        " codUtilizador = ?, " +
                        " palavraChave = ?, " +
                        " idDocfunc = ?, " +
                        " codGrupoUtilizador = ? ";
        
        PreparedStatement pst = con.prepareStatement(sqlUpd);
        pst.setString(1, utilizador.getCodUtilizador());
        pst.setString(2, utilizador.getPalavraChave());
        pst.setInt(3, utilizador.getIdDocfunc());
        pst.setString(4, utilizador.getCodGrupoUtilizador());

        pst.executeUpdate();

        if (connection == null) {
            con.close();
            con = null;
        }

        return true;
    }

    public Utilizadores selectUtilizadorTO(CriteriosPesquisa criterios) throws Exception {

        Utilizadores utilizadores = new Utilizadores();
        
        return selectUtilizadorTO(utilizadores, criterios);

    }
    
    public Utilizadores selectUtilizadorTO(Utilizadores utilizadores, CriteriosPesquisa criterio) throws Exception {
        Connection con = connection;
        Utilizador utilizador = null;
     
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT codUtilizador, palavraChave, idDocfunc, codGrupoUtilizador  " +
                         " FROM Utilizador";
                                         

        PreparedStatement pst = con.prepareStatement(sqlSlct);
        
        ResultSet rs = pst.executeQuery();
        
        while (rs.next()) {
            utilizador = new Utilizador();
            utilizador.setCodUtilizador(rs.getString("codUtilizador")); 
            utilizador.setPalavraChave(rs.getString("palavraChave"));
            utilizador.setCodGrupoUtilizador(rs.getString("codGrupoUtilizador"));
            utilizador.setIdDocfunc(rs.getInt("idDocFunc"));
            utilizadores.add(utilizador);
        }
        
        rs.close();
                
        if (connection == null) {
            con.close();
            con = null;
        }
        
        return utilizadores;
    }

    public Utilizador findUtilizador(String codUtilizador, String palavraChave) throws Exception {
        
        Utilizador utilizador = null;
        
        return findUtilizador(utilizador, codUtilizador, palavraChave);
        
    }
    
    public Utilizador findUtilizador(Utilizador utilizador, String codUtilizador, String palavraChave) throws Exception {
        Connection con = connection;
        
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT codUtilizador, palavraChave, idDocfunc, codGrupoUtilizador " +
                         " From Utilizador" +
                         " WHERE codUtilizador = ?" + 
                         "   AND palavraChave = ?";

        PreparedStatement pst = con.prepareStatement(sqlSlct);

        pst.setString(1, codUtilizador);
        pst.setString(2, palavraChave);

        ResultSet rs = pst.executeQuery();
        
         while (rs.next()) {
            utilizador.setCodUtilizador(rs.getString("codUtilizador")); 
            utilizador.setPalavraChave(rs.getString("palavraChave"));
            utilizador.setCodGrupoUtilizador(rs.getString("codGrupoUtilizador"));
            utilizador.setIdDocfunc(rs.getInt("idDocFunc"));
        }

        if (connection == null) {
            con.close();
            con = null;
        }
        
        return utilizador;
    }
    
    public Utilizador findUtilizador(String codUtilizador) throws Exception {
        
        Utilizador utilizador = null;
        
        return findUtilizador(utilizador, codUtilizador);
        
    }
    
    public Utilizador findUtilizador(Utilizador utilizador, String codUtilizador) throws Exception {
        Connection con = connection;
        
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT codUtilizador, palavraChave, idDocfunc, codGrupoUtilizador " +
                         " From Utilizador" +
                         " WHERE codUtilizador = ?";
        
        PreparedStatement pst = con.prepareStatement(sqlSlct);

        pst.setString(1, codUtilizador);
        
        ResultSet rs = pst.executeQuery();
        
         while (rs.next()) {
            utilizador.setCodUtilizador(rs.getString("codUtilizador")); 
            utilizador.setPalavraChave(rs.getString("palavraChave"));
            utilizador.setCodGrupoUtilizador(rs.getString("codGrupoUtilizador"));
            utilizador.setIdDocfunc(rs.getInt("idDocFunc"));
        }

        if (connection == null) {
            con.close();
            con = null;
        }
        
        return utilizador;
    }

}
